package com.gxar.quick.ar.server.db.mapper;

import com.gxar.quick.ar.server.base.model.user.vo.response.UserComboResponse;
import com.gxar.quick.ar.server.db.model.UserInfoEntity;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

/**
 * @author linsy
 * @version 1.0
 * @created 2023/11/3 11:14
 */
@Mapper
public interface UserInfoMapper {

    /**
     * 根据用户id集合查询
     *
     * @param userIdList 用户id集合查询
     * @return 响应
     */
    List<UserInfoEntity> queryByUserIdList(List<String> userIdList);

    /**
     * 根据用户id查询用户信息
     *
     * @param userId 用户id
     * @return 用户信息
     */
    UserInfoEntity findByUserId(Long userId);

    /**
     * 查询用户当前套餐
     *
     * @param userId 用户id
     * @return 用户套餐
     */
    UserComboResponse userCombo(Long userId);

    /**
     * 查询套餐过期的用户
     *
     * @param expiredTime 过期时间
     * @return 过期的用户
     */
    List<UserInfoEntity> findComboExpired(Date expiredTime);

    /**
     * 重置为普通会员
     *
     * @param grade   等级
     * @param comboId 套餐id
     * @param idList  会员主键
     */
    void resetOrdinaryMember(Integer grade, Long comboId, List<Long> idList);

    /**
     * 更新为用户已使用
     *
     * @param userId 用户id
     */
    void noFirstUse(Long userId);

    /**
     * 根据创建者查询
     *
     * @param phone 手机号
     * @return 响应
     */
    UserInfoEntity findByCreator(String phone);

    List<UserInfoEntity> queryPage(List<Long> userIdCondition, String creator,
                                   Date createdAtStartDate, Date createdAtEndDate, Date updatedAtStartDate, Date updatedAtEndDate);

    /**
     * 保存所有数据
     *
     * @param userInfoEntities 用户信息集合
     */
    void saveAll(List<UserInfoEntity> userInfoEntities);
}
